home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1995 November
/
EnigmA AMIGA RUN 02 (1995)(G.R. Edizioni)(IT)[!][issue 1995-11][Skylink CD].iso
/
earcd
/
comm
/
dcddv24.lha
/
DCDD.rexx
< prev
next >
Wrap
OS/2 REXX Batch file
|
1995-09-05
|
26KB
|
962 lines
/*
DCDD.rexx 950905.1815
changes since version 2.3
941203 - added SPEAKER action using SHIFT F7 to toggle it on/off
950510 - testing delay before starting arexx script
950708 - added 4800 to connect WAIT string
950725 - changed PNET NewBillDay from 06 to 01 and NewBillAdj to 'NONE'
950731 - expanded display of hours used to 3 digits
950812 - added Arexx script for auto DL of Internet news group messages
DIRECT_CONNECT_DEMON DIALER - Version 2.4
Use with Arexx Version 1.1 or better, BaudBandit 1.5 or better.
Jerry Smith - Fresno, CA. Contact BBS: F.A.A.X. (209) 226-7162
Internet address: CyberSmith@primenet.com
Not copyrighted, fully in the public domain.
Various bits and pieces lifted from other PD ARexx programs.
I would like to give special thanks to the following people:
Dave Mullenix for his GREAT series of ARexx programs for dialing PC
Pursuit. (Many of who's ideas are incorporated here)
Darcy McConnell for the use of his BBS for tests, tests, tests, etc....
Richard Stockton for his help with Arexx and BaudBandit.
My Wife and Best Friend (Diane) for her help, warmth and understanding.
*/
OPTIONS RESULTS
address BAUD
parse arg filename
TRUE = (1=1)
FALSE = ~ TRUE
EXIT_TIMER = 0
SPACER = ' '
if filename = '' then
DCDDPhone="DCDD"
else
DCDDPhone=filename
/* SHIFT F10 will stop this script before the next BBS is dialed
or break you out of a "stuck BBS" */
FKEY 'S10 \Mzap.continue.rexx'
/* SHIFT F9 will keep any AUTO.rexx from doing an AUTO logout so
that other work can be done before you logoff a BBS. */
FKEY 'S9 \Msit_stay.rexx'
/* SHIFT F8 will toggle modem speaker ON/OFF. Selected mode will
be in effect for NEXT dialing attempt */
FKEY 'S8 \Mspeaker.rexx'
/* GENERAL BAUDBANDIT SETTINGS BELOW */
mask on /* turns on mask */
/* mask off */
/* ansi on */
/* ansi off */
set F /* blanks screen w/form feed */
set 8N1 /* set modem to 8N1 */
set A /* set default to Z modem (auto DL) */
Auto OFF /* turn Auto_PhoneBook OFF */
Popup OFF /* You MUST have this in your default config or else have the
Phone Book screen getting in you way. (see DCDD.doc) */
screen off /* allows CON screen to come to the front */
Data 'RAM:-DL' /* set up default download area for downloaded files */
/* * * * * * * * * * * * * * * * * * * *
* * * Open a full sized window * * *
* * * * * * * * * * * * * * * * * * * */
windev = "CON:1/11/640/189/ Direct Connect Demon Dialer . . . . . . . . . . . . phonebook "DCDDPhone
if ~open('wind',windev) then exit /* Window for all activity */
NoError = 0
NoTimeout = 0
maxnumbers = 80 /* maximum number of entries in phonebook */
call J_Date /* creates JDATE for testing against julian date computed
from YYYYMMDD in the phonebook for display on 80 BBS
selection screen */
call ReadPhoneBk
call GetTotTime
temp= 'Time Codes used above: . 30 - 60 = 90 x 365 *'
call wsaych(temp)
call wsay(' Select BBS(s):')
BBSelections = readln('wind')
screen on /* turns BaudBandit screen on */
send '\U' /* brings BaudBandit screen to the front - here and now!
The one in the main loop will bring the screen to the front
when a BBS is connected. */
/* below allows you to enter an "A" as the first character in your BBS
selections to activate the AUTO function in Do_WHOEVER.rexx scripts.
Please note that you can not mix AUTO and MANUAL selections in the same
session. I may change this if enough people ask for it.
See Do_FAAX.rexx for an example..... */
parse var BBSelections AUTO 2 .
if upper(AUTO) = 'A' then do
address command 'makedir RAM:AUTO'
msg '********** -------------------- **********'
msg '********** AUTO PROCESS STARTED **********'
msg '********** -------------------- **********'
call delay(100)
end
/* below allows BBS number(s) separated by ,./;:\|+-*# or space(s) */
y=translate(BBSelections,' ',',Aa./;:\|=+_*#')
bbs2call=0
do i = 1 to bbsnums
parse var y first y
bbs2call=bbs2call+1
bbs.i = first
if first == '' then leave /* breaks out of DO FOREVER loop */
end
bbs2call=bbs2call-1
msg ' '
msg bbs2call 'Selected BBSes to be Called'
msg_x_flag = ' '
do z=1 to bbs2call
t=bbs.z
msg_x = ' ' /* two tests below done only on selected BBSes */
do /* below tests for AREXX SCRIPT in BBS for AUTO process */
if UPPER(AUTO) = 'A' then do
if bbs.t.script = ' ' then do
msg_x = '****** MISSING AREXX SCRIPT ******'
msg_x_flag = 'bad'
end
end
end
do /* below tests for CAPTURE TITLE in BBS for MANY processes */
parse var bbs.t.captitle CT_TEST .
if CT_TEST = ' ' then do
msg_x = '****** MISSING CAPTURE TITLE ******'
msg_x_flag = 'bad'
end
end
msg z':' bbs.t.name ' ' msg_x
end
if msg_x_flag = 'bad' then do
bbs2call = 0
msg ' '
msg ' '
msg '****** PHONEBOOK ERROR(S) - SEE LIST ABOVE ******'
msg ' '
msg '10'
call delay(50)
msg ' 9'
call delay(50)
msg ' 8'
call delay(50)
msg ' 7'
call delay(50)
msg ' 6'
call delay(50)
msg ' 5'
call delay(50)
msg ' 4'
call delay(50)
msg ' 3'
call delay(50)
msg ' 2'
call delay(50)
msg ' 1'
call delay(50)
end
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* Main Loop *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
listindex=1 ;
do while bbs2call ~= 0
indx = bbs.listindex
call CONTINUE_TEST
msg ''
if upper(AUTO) = 'A' then
msg 'AUTO >> Dialing:' bbs.indx.name
else
msg 'Dialing:' bbs.indx.name
bbsconnect = false
nresult = ' '
call at_codes /* send AT codes to modem for selected BBS. This is VERY
useful when using a SupraFAXmodem V32.bis at 14.4 */
Data 'RAM:-DL' /* set up default download area for downloaded files */
if CallBBS(bbs.indx.phone) = NoTimeout then do
if pos('CARRIER',nresult) = 1 then do
/* next line resets elapsed timer */
call time(R)
timea=translate(time(n),' ',':')
parse value timea with timeHH timeMM timeSS .
timeHHMM=timeHH||timeMM
call GetToday
beep
send '\u' /* (pull screen to front when bbs connected)
You may or may not want to use this here. */
parse var bbs.indx.captitle CT PW1 PW2 LD TM MN SPD .
/* Capt "RAM:-dl below puts all Capture Logs in to this dir */
if CT ~= '' then
Capt 'RAM:-dl/'CT'.'dateYYMMDD'.'timeHHMM'.1'
/* above gives you files like OLD_DOC.930719.1718.1 - Had to add time so
that files opened up on RAM:-dl would not duplicate files in DH1:-dl
when they are transfered after logging out of a BBS. Really do need to
download into RAM when doing V32.bis 14.4 with a 68000 native CPU. */
if bbs.indx.script ~= '' then do
call delay(10)
parse var bbs.indx.script title Xargs
/* msg 'Starting Arexx Script: ' title */
if PW1 = ' ' then PW1 = 'NO_PW_1'
if PW2 = ' ' then PW2 = 'NO_PW_2'
if Xargs = ' ' then Xargs = ' NO_Xargs'
OUTargs = title||"("PW1||spacer||PW2||Xargs||")"
interpret 'call' OUTargs
end
call DoPairs
call wait4disconnect
Capture OFF
/* items below copy ALL data in RAM:-dl to DH1:-dl
and then clears RAM:-dl for the next BBS called.
At the end of a days BBSing I create a file called DH1:-dl-YYMMDD
and copy the contents of DH1:-dl into it and then clear DH1:-dl
for the next days activity. */
/* BE SURE DH1: has room for the files you DL!!!!!!!!!!!!!!!!! */
address command 'copy RAM:-dl/#? DH1:-dl'
address command 'delete RAM:-dl/#?'
call removebbs /* remove bbs from selection group */
end
send '\d' /* drop DTR */
send '\ah' /* hangs up modem */
call selectnextbbs /* select next bbs from selection group */
end
call CONTINUE_TEST /* test for ram:continue as flag to continue or quit*/
if listindex > bbs2call then
listindex = 1
end
/* next two lines force DCDD.rexx to quit */
address command 'delete RAM:continue'
call CONTINUE_TEST
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* Functions / Subroutines *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
Continue_Test:
/* tests for RAM:continue as flag to continue or quit */
if exists('ram:continue')=0 then do
call delay(50)
msg ' '
msg ' '
msg '**************************************************'
msg '***** ******'
msg '***** EXITING * DIRECT CONNECT DEMON DIALER ******'
msg '***** ******'
msg '**************************************************'
capture OFF
call close('wind')
send '\d' /* drop DTR */
send '\ah' /* hangs up modem */
send '\aq' /* closes BaudBandit */
exit /* exits Arexx */
end
else do
call delay(10)
beep
call delay(10)
beep
end
return
AT_codes:
/* sends special AT codes for currently selected BBS to modem */
send 'AT&F2' /* resets modem to factory settings */
send '\w\r'
send 'AT&F2' /* resets modem to factory settings 2nd time */
send '\w\r' /* don't know why it needs it but it do! */
/* W1 below is necessary to set the CARRIER option so that the
baud rate at connect is captured.
M = speaker off. */
if bbs.indx.atcodes ~= '' then
msg 'AT codes sent to modem - ' bbs.indx.atcodes
if exists('ram:speaker')=0 then /* file not there */
send 'AT M W1 'bbs.indx.atcodes
if exists('ram:speaker')~=0 then /* file exists */
send 'AT W1 'bbs.indx.atcodes
send '\w\r'
return
Wsay:
/* put string to window with EOL */
parse arg strx
call writeln('wind',strx)
return
WsayCH:
/* put string to window without EOL */
parse arg strx
call writech('wind',strx)
return
DoPairs:
/* Have BaudBandit execute script pairs just like in Phonebook */
/* Some BBS software needs an ESCAPE key (or two) to load and this can be
taken care of using a Script Pair that starts like:
{Escape twice=\w\x1B\w\x1B\w\r}{....then your remaining stuff....
*/
if bbs.indx.pair ~= '' then do /* Do optional pairs after connect */
address BAUD
pairs bbs.indx.pair
end
return
wait4disconnect:
if bbs.indx.script = '' then do
msg ''
msg '+--------------------------------------+'
msg ' WAITING FOR 'bbs.indx.name' DISCONNECT '
msg '+--------------------------------------+'
end
call delay(150)
do forever
ADDRESS BAUD
dcd
/* note: RTEST holds RC value as RC resets after every Arexx command
is executed. */
RTEST = RC
if RTEST = 0 then do
msg '... Dropped Carrier ...'
leave /* breaks out of DO FOREVER loop */
end
call delay(250) /* 5 second delay for FOREVER loop */
/* below uses shift F10 to get out of a "STUCK BBS".
this routine also used for Arexx Script failed WAIT LOOP exiting.
Please note that this does NOT end the session just current BBS. */
if exists('ram:continue')=0 then do
msg '****** FORCED BBS LOGOFF BY USER ******'
address command 'makedir ram:continue'
call delay(50)
leave /* breaks out of DO FOREVER loop */
end
/* NOTE: process below replaced by NESTED DO FOREVER/WAIT LOOPS
see Do_FAAX.rexx for an example... */
/* below uses RAM:exit_flag to get out of a "STUCK BBS" when
you are using Arexx scripts for Auto late nite sessions
and want to be sure of exiting a BBS if they have changed
things and your script gets "HUNG UP". The EXIT_TIMER will
be reset to zero if RAM:exit_flag is absent. */
if exists('ram:exit_flag')=0 then do
exit_timer = 0
end
else do
exit_timer = exit_timer + 5
if exit_timer > 300 then do
msg '****** FORCED LOGOFF BY EXIT_TIMER ******'
call delay(50)
address command 'delete ram:EXIT_TIMER'
leave /* breaks out of DO FOREVER loop */
end
end
end
/*
below is old OLD way of holding till logged off BBS.
it had a "BIG" problem with matching text during DL's.
wait 'NO CARRIER'
*/
/* Get connection elapsed time from Arexx timer */
timeE=(time(e))
chours = timeE % 3600
choursrem = timeE // 3600
cmins = choursrem % 60
csecsx = choursrem // 60
csecs = csecsx % 1
cTOTAL = right(chours,3,'0')':'right(cmins,2,'0')':'right(csecs,2,'0')
msg 'Updating Total Time'
/*
DCDDdiscos file contains information about the BBS Session that just
ended along with all the previous sessions you want to keep.
the dateYYMMDD timeHHMM phone connect-time info can be compared to
your phone bill to make sure you get all the service you pay for.
this file will grow and grow unless you prune it back.
*/
discotitle='DCDDdiscos'
if open('discos',discotitle,'Append') = 0 then /* append if exists */
call open('discos',discotitle,'Write') /* else create file */
temp = dateYYMMDD timeHHMM bbs.indx.phone cTOTAL CT SPEED bbs.indx.name
call writeln('discos',temp)
call close('discos')
/*
History file added so that this file will (when sorted) give you a
complete log of sessions on a BBS by BBS basis. this file will
grow and grow unless you prune it back.
*/
htitle='DCDDhistory'
if open('hist',htitle,'Append') = 0 then /* append if exists */
call open('hist',htitle,'Write') /* else create file */
htemp = CT dateYYMMDD timeHHMM cTOTAL SPEED bbs.indx.name
call writeln('hist',htemp)
call close('hist')
/*
below reads in the Bandit.'DCDDPhone' file and writes it out to
ram:Bandit.'DCDDPhone'. During this process the bbs.j.captitle record
is updated for the BBS just visited for BBS activity tracking. This
will be used at the next session to display information on the BBS
selection screen so that you know how long ago you visited that BBS.
this process also updates the other Bandit.'DCDDPhone' bbs.j.captitle
records and reformats them as necessary.
*/
call open('in1A','Bandit.'DCDDPhone,'r')
call open('out1A','ram:Bandit.'DCDDPhone,'W')
call J_DATE /* used to get JDATE at logoff point in BBS session */
/* Read BBS PhoneBook records */
do until EOF('in1A')
inline1A=readln('in1A')
if ~ EOF('in1A') then do
parse var inline1A DASHES 6 .
if DASHES = '-----' then
line_cnt = 0
line_cnt = line_cnt + 1
if line_cnt = 6 then do
parse var inline1A CTN PW1N PW2N LDN TMN MNN SPDN .
if PW1N = ' ' then PW1N = 'NO_PW_1'
if PW2N = ' ' then PW2N = 'NO_PW_2'
if LDN = ' ' then LDN = 19780101 /* 19780101 was the first */
if LDN = 0 then LDN = 19780101 /* day of the AMIGA age. */
if TMN = ' ' then TMN = 0 /* see Arexx "date" docs */
if MNN = ' ' then MNN = 0
if SPDN = ' ' then SPDN = 0
if CTN = CT then do
inline1A = CTN PW1N PW2N dateYYYYMMDD timeHHMM cTOTAL SPEED
end
else do
inline1A = CTN PW1N PW2N LDN TMN MNN SPDN
end
end /* end for (if line_cnt = 6) */
call writeln('out1A', inline1A)
end /* end for (if ~ EOF) */
end /* end for (do until EOF) */
call close('in1A')
call close('out1A')
/* below copies temporary file from ram back over Bandit.'DCDDPhone' file
and then deletes it in ram. */
address command 'copy ram:Bandit.#? dh0:DemonDialer'
address command 'delete ram:Bandit.#?'
call GetTimeTitle
if open('TotTime',timetitle,'R')=0 then do /* Total hours, mins, secs */
thours = 0
tmins = 0 /* If file doesn't exist, set to zero */
tsecs = 0
end
else do
thours=readln('TotTime') /* If file does exist, read them */
tmins=readln('TotTime')
tsecs=readln('TotTime')
call close('TotTime')
end
msg 'Monthly total:' right(thours,3,'0')':'right(tmins,2,'0')':'right(tsecs,2,'0')
msg ' This call:' cTOTAL
nhours = chours+thours
if csecs > 0 then do /* the Damn phone company rounds */
cmins = cmins + 1 /* any seconds into a full minute */
csecs = 0
end
nmins = cmins+tmins
nsecs = csecs+tsecs
nmins=nmins+nsecs%60 ; nsecs = nsecs//60
nhours=nhours+nmins%60 ; nmins = nmins//60
call open('TotTime',timetitle,'W')
call writeln('TotTime', nhours)
call writeln('TotTime', nmins)
call writeln('TotTime', nsecs)
call close('TotTime')
msg ' --------'
msg ' New Total:' right(nhours,3,'0')':'right(nmins,2,'0')':'right(nsecs,2,'0')' by 'TotalBy' for month/year: 'dateMMx'/'dateYYYYx
msg ' '
return
removebbs:
/* Done with that bbs, change ALL occurances to "called" in selection group */
do j = 1 to bbs2call
if bbs.j = indx then do
bbs.j = 'called'
end
end
return
selectnextbbs:
/* Select the next available BBS from selection group */
yet2call = 0
wascalled = 0
do k = 1 to bbs2call
if bbs.k = 'called' then do
wascalled = wascalled + 1
end
else do
yet2call = yet2call + 1
end
end
if yet2call = 0 then do
bbs2call = 0
end
else do
loopcount = 0
do forever
listindex=listindex + 1
if listindex > bbs2call then
listindex = 1
loopcount = loopcount + 1
if bbs.listindex ~= 'called' then
leave /* breaks out of DO FOREVER loop */
if loopcount > 2 then do
msg '****** loopcount > 2 ******'
bbs2call = 0
leave /* breaks out of DO FOREVER loop */
end
end
livecount = 0
if yet2call ~= 0 or exists('ram:continue')=0 then do
msg ' '
msg yet2call ' BBSes yet to be called'
do z=1 to bbs2call
t=bbs.z
if bbs.z ~= 'called' then do
livecount = livecount + 1
msg livecount ':' bbs.t.name
end
end
end
end
return
CallBBS:
/* Dial Selected BBS */
arg number
call delay(25)
timeout 120 /* wait continues if no connectstring within 2 minutes */
send 'ATDT'number'\r'
call shownotes
connectstring='CARRIER 14400,CARRIER 12000,CARRIER 9600,CARRIER 7200,CARRIER 4800,CARRIER 2400,BUSY,OK,NO CARRIER,NO DIALTONE'
wait connectstring
NRC = RC
NRESULT = RESULT
call delay(50)
parse value NRESULT with AAA SPEED .
/* SPEED above used to capture arbitated carrier connect speed */
return NRC
shownotes:
/* Show BBS notes if present */
if bbs.indx.notenum > 0 then do
msg 'Notes for' bbs.indx.name':'
do notex = 1 to bbs.indx.notenum
msg bbs.indx.notes.notex
end
end
else do
msg 'No notes for' bbs.indx.name
end
msg ' '
return
GetToday:
dateYYYY=left(date(sorted),4)
dateYYYYMM=left(date(sorted),6)
dateMM=right(dateYYYYMM,2)
dateYYMMDD=right(date(sorted),6)
dateDD=right(dateYYMMDD,2)
return
GetTotTime:
/* gets total time for the month */
call GetTimeTitle
if open('TotTime',timetitle,'R')=0 then do /* Total hours, mins, secs */
thours = 0
tmins = 0 /* If file doesn't exist, set to zero */
tsecs = 0
end
else do
thours=readln('TotTime') /* If file does exist, read them */
tmins=readln('TotTime')
tsecs=readln('TotTime')
call close('TotTime')
end
return
GetTimeTitle:
call GetToday
/*
Internet access has been added to DCDD and this has forced me to keep
monthly time totals for different SERVICES. I am using PNET for my
Internet connection, LONGD for my long distance direct dialing, and
LOCAL for my local BBSes. The totals are controled the same as befor
by using NewBillDay and NewBillAdj.
If for instance NewBillDay = 8, and NewBillAdj = MINUS then the monthly
hours/minutes/seconds total will run from the 8th of one month till the
7th of the next month to match the way your phone company bills you.
NewBillAdj is used to either put the first few days of this month into
last months totals (MINUS) or the last few days of this month into next
month (PLUS). (sort of crazy but it works!)
*/
parse var bbs.indx.service TotalBy .
/* * * * * * ************************************************ * * * * * */
/* ********* BE SURE TO PUT THE DATA BELOW INTO DCDDtime.rexx ********* */
/* * * * * * ************************************************ * * * * * */
if TotalBy = ' ' then do
TotalBy = 'LONGD'
NewBillDay = 08
NewBillAdj = 'MINUS'
end
if TotalBy = 'LONGD' then do
NewBillDay = 08
NewBillAdj = 'MINUS'
end
/*
if TotalBy = 'CRIS' then do
NewBillDay = 13
NewBillAdj = 'MINUS'
end
*/
if TotalBy = 'CRIS' then do
NewBillDay = 01
NewBillAdj = 'NONE'
end
if TotalBy = 'PNET' then do
NewBillDay = 01
NewBillAdj = 'NONE'
end
if TotalBy = 'LOCAL' then do
NewBillDay = 00
NewBillAdj = 'NONE'
end
/* * * * * * ************************************************ * * * * * */
/* ********* BE SURE TO PUT THE DATA ABOVE INTO DCDDtime.rexx ********* */
/* * * * * * ************************************************ * * * * * */
dateMMx = dateMM
dateYYYYx = dateYYYY
if NewBillAdj = "MINUS" then do
if dateDD < NewBillDay then do
if dateMM = 01 then do
dateMMx = 12
dateYYYYx = dateYYYY - 1
end
else do
dateMMx = dateMM - 1
if dateMMx < 10 then
dateMMx = 0||dateMMx
end
end
end
if NewBillAdj = "PLUS" then do
if dateDD ~ < NewBillDay then do
if dateMM = 12 then do
dateMMx = 01
dateYYYYx = dateYYYY + 1
end
else do
dateMMx = dateMM + 1
if dateMMx < 10 then
dateMMx = 0||dateMMx
end
end
end
timetitle='DCDDtime_'totalby||'_'||dateYYYYx||dateMMx
dateYYYYMMDDx = dateYYYYx||dateMMx||dateDD
if NewBillAdj = "NONE" then do
timetitle='DCDDtime_'totalby||'_'||dateYYYYMM
dateYYYYMMDDx = dateYYYY||dateMM||dateDD
end
return
J_DATE:
dateYYYYMMDD = left(date(sorted),8)
JDATE = date('i',dateYYYYMMDD,'s')
return
ReadPhoneBk:
/* Read Phone Book into Arexx array */
call open('PhoDir','Bandit.'DCDDPhone,'r')
bbsnums = 0 /* Read BBS records */
inline1=readln('PhoDir')
do j=1 to maxnumbers until eof('PhoDir')
bbsnums = bbsnums + 1
bbs.j.name=strip(readln('PhoDir'))
bbs.j.phone=strip(readln('PhoDir'))
bbs.j.service=strip(readln('PhoDir'))
bbs.j.atcodes=strip(readln('PhoDir'))
bbs.j.captitle=strip(readln('PhoDir'))
bbs.j.script=strip(readln('PhoDir'))
bbs.j.pair=strip(readln('PhoDir'))
/* Read optional notes */
notex=0 ; inline1=''
do until inline1 = '-----' | EOF('PhoDir')
inline1=readln('PhoDir')
if inline1 ~= '-----' then do
notex = notex + 1
bbs.j.notes.notex = inline1
end
end
bbs.j.notenum = notex
/* Print BBS name */
parse var bbs.j.captitle CTN PW1N PW2N LDN TMN MNN SPDN .
/* JDATE (below) is from initilization point at start of this session */
if LDN = ' ' then LDN = 19780101 /* 19780101 was the first */
if LDN = 0 then LDN = 19780101 /* day of the AMIGA era. */
/* see Arexx "date" docs */
JDATEN = date('i',LDN,'s')
JDIFF = JDATE - JDATEN
JX = '.'
if jdiff > 030 then JX = '-'
if jdiff > 060 then JX = '='
if jdiff > 090 then JX = 'x'
if jdiff > 365 then JX = '*'
if j//4 ~= 0 then do /* allows four across on CON window */
/*
I use bbs.j.captitle instead of bbs.j.name below because all my files
use the same name as my discos and capture files and I only have to
remember one name. The FULL name is used when you connect to a BBS
*/
call wsaych(right(j,2,' ') JX left(CTN,14,' '))
end
else
call wsay(right(j,3,' ') JX left(CTN,14,' '))
end
call close('PhoDir')
bbsnums=bbsnums-1
if bbsnums//2 = 0 then
call wsay('')
return